#java #maven #junit5 #surefire 

## Подключение и настройка плагина maven.surefire.plugin

```
<build>
    <plugins>
        [...]
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>3.1.2</version>
            <configuration>
              <!-- пропуск тестов, аналог mvn install -Dmaven.test.skip=true -->
              <skipTests>true</skipTests>

              <!-- пропуск тестов, аналог mvn install -Dmaven.test.failure.ignore=true -->
              <testFailureIgnore>true</testFailureIgnore>
            </configuration>
          </plugin>
        [...]
    </plugins>
</build>
```
## Режимы запуска
##### Установка приложения в локальный репозиторий с пропуском тестов
```
mvn install -Dmaven.test.skip=true
```
##### Установка приложения в локальный репозиторий с игнорированием падения теста
```
mvn install -Dmaven.test.failure.ignore=true
```
##### Запуск теста в режиме отладки
```
mvn -Dmaven.surefire.debug test -f pom.xml
```
##### Запуск теста в режиме отладки с указанием тэга JUnit5
См. раздел **Использование тэгов JUnit5**
```
mvn -Dmaven.surefire.debug test -Dgroups=TagForStartTest -f pom.xml
```
## Использование тэгов JUnit5

###### 1. Указать аннотацию @Tag
```
Добавить аннотацию @Tag для тестового метода:
@Tag("TagForMethod")
@Test
void simpleTest() {}

Или для тестового класса:
@Tag("TagForClass")
public class SimpleTest {}
```
###### 2. Запуск указанного в аннотации тестового метода или тестового класса
```
mvn clean test -Dgroups=TagForMethod

mvn clean test -Dgroups=TagForClass
```
## Запуск тэгов по условию

Для тэгов возможно указать условия запуска. В этом случае к параметру -Dgroups 
и его значению необходимо добавить двойные кавычки.

Возможные условия:
* | - логическое ИЛИ
* & - логическое И
* () - группировка выражений
#### Примеры команд запуска по условию
```
Производится запуск тестов, в которых указаны оба тэга:
mvn clean test "-Dgroups=Regress & Smoke"

Производится запуск тестов, в которых присутствует один из указанных тэгов:
mvn clean test "-Dgroups=Regress | Smoke"

Производится запуск тестов, в которых присутствуют либо оба тэга из группы (Regress & Smoke), 
либо тэг Release:
mvn clean test "-Dgroups=(Regress & Smoke) | Release"
```
## Многомодульный проект
##### Сборка одного модуля
```
mvn -pl=module install
```
##### Сборка указанного в команде модуля и связанных с ним модулей
```
mvn -pl=module -am install
```
## Запуск в несколько потоков
##### Запуск с указанным количеством потоков
```
mvn clean install -T 4
```
##### Запуск в один поток на один процессор
```
mvn clean install -T 1C
```
## Ссылки на ресурсы
* [Настройки плагина maven-surefire-plugin](https://maven.apache.org/components/surefire/maven-surefire-plugin/test-mojo.html)
* [Подключение плагина к JUnit](https://maven.apache.org/surefire/maven-surefire-plugin/examples/junit.html)
* [Maven: The Complete Reference](https://books.sonatype.com/mvnref-book/reference/index.html)



***
#TODO Добавить
Запуск тестов для модуля проекта 'exceptions-module':
> mvn clean test -pl exceptions-module

Запуск тестов с тэгами 'GroupOne' и 'GroupTwo':
> mvn clean test "-Dgroups=GroupOne & GroupTwo"

Запуск тестов с тэгами 'GroupOne' или 'GroupTwo' (в разных тестах могут присутствовать разные тэги):
> mvn clean test "-Dgroups=GroupOne | GroupTwo"

Запуск тестов с тэгами 'GroupOne' и 'GroupTwo' или 'GroupThree':
> mvn clean test "-Dgroups=(GroupOne & GroupTwo) | GroupThree"

Запуск отладки тестов для тэга 'GroupOne':
> mvn -Dmaven.surefire.debud test -Dgroups=GroupOne -f pom.xml

Просмотр дерева зависимостей и решение конфликтов:
> mvn -Dverbose dependency:tree

Запуск Maven в режиме отладки:
> mvn -X <команда>